﻿using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using GiaoXuLanTranh_MucVu.Models;
using InfoTech.Core.Data.SqlClient;
using InfoTech.Data.Linq;
using InfoTech.LanTranh.MucVu.Bussiness;
using InfoTech.LanTranh.MucVu.Service;
using InfoTech.Mvc.JqGrid;
using InfoTech.Mvc.LanTranh.MucVu.Models;

namespace GiaoXuLanTranh_MucVu.Areas.AdminCP.Controllers
{
    [Authorize]
    public class OtherController : Controller
    {

        #region Hien Trang Hon Nhan

        public ActionResult HienTrangHonNhan()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_HienTrangHonNhan_Index";
            header.CurentCommon = "HienTrangHonNhan";
            header.PageTitle = "Quản Lý Khác";
            header.PageHeader = "Hiện Trạng Hôn Nhân - Quản Lý Khác";
            header.Menulv1 = "06";
            header.Menulv2 = "0601";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_HienTrangHonNhan()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<HIENTRANGHONNHAN> query = dataContext.GetTable<HIENTRANGHONNHAN>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<HIENTRANGHONNHAN>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<HIENTRANGHONNHAN>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<HIENTRANGHONNHAN>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<HIENTRANGHONNHAN>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<HIENTRANGHONNHAN>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Select(c => new HIENTRANGHONNHANModel(c))
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddHienTrangHonNhan()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_Other_Index";
            header.CurentCommon = "HienTrangHonNhan";
            header.PageTitle = "Quản Lý Khác";
            header.PageHeader = "Thêm Hiện Hôn Nhân";
            header.Menulv1 = "06";
            header.Menulv2 = "0601";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddHienTrangHonNhan(HIENTRANGHONNHANModel hientranghonnhanModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_Other_Index";
            header.CurentCommon = "HienTrangHonNhan";
            header.PageTitle = "Quản Lý Khác";
            header.PageHeader = "Thêm Hiện Hôn Nhân";
            header.Menulv1 = "06";
            header.Menulv2 = "0601";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                HIENTRANGHONNHAN hientranghonnhan = hientranghonnhanModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (HIENTRANGHONNHANService.Check_Insert_HIENTRANGHONNHAN(hientranghonnhan))
                {
                    Exception exception;
                    hientranghonnhan.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //hientranghonnhanModel.NAME = "";
                        hientranghonnhanModel.TENHIENTRANGHONNHAN = "";
                        ModelState["TENHIENTRANGHONNHAN"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        hientranghonnhanModel.PRIORITY = null;
                        ModelState["PRIORITY"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(hientranghonnhanModel);
        }

        public ActionResult EditHienTrangHonNhan(string id)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_Other_Index";
            header.CurentCommon = "HienTrangHonNhan";
            header.PageTitle = "Quản Lý Khác";
            header.PageHeader = "Cập nhật Hiện Hôn Nhân";
            header.Menulv1 = "06";
            header.Menulv2 = "0601";
            ViewData[Header.Key] = header;

            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                HIENTRANGHONNHAN hientranghonnhan = new HIENTRANGHONNHAN();
                hientranghonnhan.MAHIENTRANGHONNHAN = guid;
                hientranghonnhan.SelectbyId();
                if (hientranghonnhan.IsPersistence)
                {
                    return View(new HIENTRANGHONNHANModel(hientranghonnhan));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("HienTrangHonNhan");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditHienTrangHonNhan(HIENTRANGHONNHANModel hientranghonnhanModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_Other_Index";
            header.CurentCommon = "HienTrangHonNhan";
            header.PageTitle = "Quản Lý Khác";
            header.PageHeader = "Cập nhật Hiện Hôn Nhân";
            header.Menulv1 = "06";
            header.Menulv2 = "0601";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                HIENTRANGHONNHAN hientranghonnhan = hientranghonnhanModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (HIENTRANGHONNHANService.Check_Update_HIENTRANGHONNHAN(hientranghonnhan))
                {
                    Exception exception;
                    hientranghonnhan.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //hientranghonnhanModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(hientranghonnhanModel);
        }

        public ActionResult DeleteHienTrangHonNhan(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (HIENTRANGHONNHANService.Check_Delete_HIENTRANGHONNHAN(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var hientranghonnhan = new HIENTRANGHONNHAN();
                            hientranghonnhan.MAHIENTRANGHONNHAN = guid;
                            Exception exception;
                            hientranghonnhan.SelectbyId();
                            if (hientranghonnhan.IsPersistence)
                            {
                                // Check service here
                                HIENTRANGHONNHANService.Delete(hientranghonnhan);

                                hientranghonnhan.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Ton Giao

        public ActionResult TonGiao()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_TonGiao_Index";
            header.CurentCommon = "TonGiao";
            header.PageTitle = "Quản Lý Khác";
            header.PageHeader = "Tôn Giáo - Quản Lý Khác";
            header.Menulv1 = "06";
            header.Menulv2 = "0602";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_TonGiao()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<TONGIAO> query = dataContext.GetTable<TONGIAO>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<TONGIAO>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<TONGIAO>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<TONGIAO>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<TONGIAO>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<TONGIAO>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Select(c => new TONGIAOModel(c))
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddTonGiao()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_Other_Index";
            header.CurentCommon = "TonGiao";
            header.PageTitle = "Quản Lý Khác";
            header.PageHeader = "Thêm mới Tôn Giáo Bạn - Quản Lý Khác";
            header.Menulv1 = "06";
            header.Menulv2 = "0602";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddTonGiao(TONGIAOModel tongiaoModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_Other_Index";
            header.CurentCommon = "TonGiao";
            header.PageTitle = "Quản Lý Khác";
            header.PageHeader = "Thêm mới Tôn Giáo Bạn - Quản Lý Khác";
            header.Menulv1 = "06";
            header.Menulv2 = "0602";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                TONGIAO tongiao = tongiaoModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (TONGIAOService.Check_Insert_TONGIAO(tongiao))
                {
                    Exception exception;
                    tongiao.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //tongiaoModel.NAME = "";
                        tongiaoModel.TENTONGIAO = "";
                        ModelState["TENTONGIAO"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        tongiaoModel.PRIORITY = null;
                        ModelState["PRIORITY"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(tongiaoModel);
        }

        public ActionResult EditTonGiao(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                TONGIAO tongiao = new TONGIAO();
                tongiao.MATONGIAO = guid;
                tongiao.SelectbyId();
                if (tongiao.IsPersistence)
                {
                    Header header = new Header();
                    header.Common = "ViewUserControl_Other_Index";
                    header.CurentCommon = "TonGiao";
                    header.PageTitle = "Quản Lý Khác";
                    header.PageHeader = "Cập nhật Tôn Giáo Bạn - Quản Lý Khác";
                    header.Menulv1 = "06";
                    header.Menulv2 = "0602";
                    ViewData[Header.Key] = header;

                    return View(new TONGIAOModel(tongiao));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("TonGiao");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditTonGiao(TONGIAOModel tongiaoModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_Other_Index";
            header.CurentCommon = "TonGiao";
            header.PageTitle = "Quản Lý Khác";
            header.PageHeader = "Cập nhật Tôn Giáo Bạn - Quản Lý Khác";
            header.Menulv1 = "06";
            header.Menulv2 = "0602";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                TONGIAO tongiao = tongiaoModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (TONGIAOService.Check_Update_TONGIAO(tongiao))
                {
                    Exception exception;
                    tongiao.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //tongiaoModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(tongiaoModel);
        }

        public ActionResult DeleteTonGiao(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (TONGIAOService.Check_Delete_TONGIAO(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var tongiao = new TONGIAO();
                            tongiao.MATONGIAO = guid;
                            Exception exception;
                            tongiao.SelectbyId();
                            if (tongiao.IsPersistence)
                            {
                                // Check service here
                                TONGIAOService.Delete(tongiao);

                                tongiao.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

    }
}
